package com.pet.common.model;

import com.pet.common.constant.ResponseCode;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;

import java.io.Serializable;

/**
 * API 返回结果
 *
 * @author Centaurea
 */
@Schema(name = "api返回数据模型", title = "api返回数据模型")
@ApiModel("api通用返回数据")
@Data
@AllArgsConstructor
public class ResponseResult implements Serializable {
  private static final long serialVersionUID = 3294105239432212569L;

  /** 标识代码，0表示成功，非0表示出错 */
  @ApiModelProperty("标识代码，0表示成功，非0表示出错")
  private Integer code;

  /** 提示信息，通常供报错时使用 */
  @ApiModelProperty("提示信息，供报错时使用")
  private String msg;

  /** 正常返回时返回的数据 */
  @ApiModelProperty("返回的数据")
  private Object data;

  /** 返回默认成功状态的数据 */
  @ApiOperation("成功获取数据时，快速构成反馈给前端对象的静态方法")
  public static ResponseResult success(Object data) {
    return new ResponseResult(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg(), data);
  }

  /** 返回指定成功状态的数据 */
  @ApiOperation("成功获取数据时，指定成功类型，快速构成反馈给前端对象的静态方法")
  public static ResponseResult success(ResponseCode codeType, Object data) {
    return new ResponseResult(codeType.getCode(), codeType.getMsg(), data);
  }

  /** 返回默认成功状态 */
  @ApiOperation("成功完成操作时，快速构成反馈给前端实现状态的默认静态方法")
  public static ResponseResult success() {
    return new ResponseResult(ResponseCode.SUCCESS.getCode(), ResponseCode.SUCCESS.getMsg(), null);
  }

  /** 返回指定成功状态 */
  @ApiOperation("成功完成操作时，快速构成反馈给前端实现状态的静态方法")
  public static ResponseResult success(ResponseCode codeType) {
    return new ResponseResult(codeType.getCode(), codeType.getMsg(), null);
  }

  /** 返回默认出错状态 */
  @ApiOperation("出现错误时，默认错误类型，快速构成反馈给前端对象的默认静态方法")
  public static ResponseResult error() {
    return new ResponseResult(ResponseCode.ERROR.getCode(), ResponseCode.ERROR.getMsg(), null);
  }

  /** 返回默认出错状态，并指定错误信息 */
  @ApiOperation("出现错误时，默认错误类型，快速构成反馈给前端对象的默认静态方法")
  public static ResponseResult error(String msg) {
    return new ResponseResult(ResponseCode.ERROR.getCode(), msg, null);
  }

  /** 返回指定出错状态 */
  @ApiOperation("出现错误时，指明错误类型，快速构成反馈给前端对象的静态方法")
  public static ResponseResult error(ResponseCode codeType) {
    return new ResponseResult(codeType.getCode(), codeType.getMsg(), null);
  }
}
